home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2001 Spring / Oh!X 2001 Spring Special CD-ROM (Japan).7z / Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin / GALAXY / ohx5-1 / ohx5_1.cpp < prev    next >
C/C++ Source or Header  |  2000-12-16  |  6KB  |  223 lines

  1. //
  2. // ohx5_1.cpp
  3. //
  4.  
  5. /*--------------------------------------- ヘッダーファイル&マクロ定義 ------------------------*/
  6.  
  7. #define STRICT
  8.  
  9.  
  10. #include "stdafx.h"
  11. #define    EXT
  12. #include "ohx5_1.h"
  13.  
  14. char application_name[] = "OhX-5 GalaxyKnights sample";
  15.  
  16.  
  17. // このコード モジュールに含まれる関数の前宣言:
  18. ATOM            MyRegisterClass( HINSTANCE hInstance );
  19. BOOL            InitInstance( HINSTANCE, int );
  20. LRESULT CALLBACK    main_window_proc( HWND, UINT, UINT, LONG );
  21. LRESULT CALLBACK    About( HWND, UINT, WPARAM, LPARAM );
  22. LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
  23.  
  24. /*-------------------------------    外部変数    --------------------------------------------*/
  25.  
  26.  
  27.  
  28.  
  29. /*------------------------------- 本体コーディング ------------------------------------------*/
  30.  
  31. /*
  32.     メインウインドウを取得して、属性を与える
  33. */
  34. bool    init_window( HINSTANCE hInst,int cmdshow )
  35. {
  36. WNDCLASS wndclass;
  37. hInstApp = hInst;
  38.  
  39. //    ウインドウ・クラス作成(詳細はWindowsAPIに関する各資料を参照してください)
  40.     wndclass.style            = CS_BYTEALIGNCLIENT|CS_HREDRAW|CS_VREDRAW;    // ウインドウのスタイル定義(サイズ変更時の再描画、BYTEアライメント調整)
  41.     wndclass.lpfnWndProc    = (WNDPROC)main_window_proc;                    // メインウインドウのイベント処理プロシジャ
  42.     wndclass.cbClsExtra        = 0;
  43.     wndclass.cbWndExtra        = 0;
  44.     wndclass.hInstance        = hInst;
  45.     wndclass.hIcon            = NULL;
  46.     wndclass.hCursor        = LoadCursor(NULL,IDC_ARROW);
  47.     wndclass.hbrBackground    = (HBRUSH)GetStockObject(BLACK_BRUSH);
  48.     wndclass.lpszMenuName    = MAKEINTRESOURCE(IDC_OHX4);
  49.     wndclass.lpszClassName    = application_name;
  50.  
  51. //    ウインドウ・クラスの登録
  52.     if( !RegisterClass( &wndclass ) ){ return false; }
  53.  
  54. //    メインウインドウの確保
  55.     hwndApp = CreateWindowEx(
  56.         WS_EX_CLIENTEDGE,
  57.         application_name,
  58.         application_name,
  59.         WS_OVERLAPPEDWINDOW,
  60.         CW_USEDEFAULT,CW_USEDEFAULT,640,480,
  61.         (HWND)NULL,
  62.         (HMENU)NULL,
  63.         hInst,
  64.         (LPSTR)NULL );
  65.  
  66.     ShowWindow( hwndApp, cmdshow );
  67.     UpdateWindow( hwndApp );
  68.     return true;
  69. }
  70.  
  71.  
  72.  
  73. /*-------------------------------------------
  74.     ウィンドウ処理
  75. --------------------------------------------*/
  76. LRESULT CALLBACK main_window_proc(HWND handle,UINT msg,UINT window_param,LONG param2 )
  77. {
  78.     switch(msg){
  79.     case WM_ACTIVATE:
  80.         switch( window_param ){
  81.         case WA_ACTIVE:
  82.             restart_draw();
  83.             break;
  84.         case WA_CLICKACTIVE:
  85.         case WA_INACTIVE:
  86.             pause_draw();
  87.             break;
  88.         }
  89.         break;
  90.     case WM_ACTIVATEAPP:    // アプリケーションの状態に合わせて動作を制御する
  91.         if ((BOOL)window_param ) restart_draw(); else pause_draw();
  92.         break;
  93.     case WM_KEYDOWN:
  94.         switch( window_param ){
  95.         case VK_ESCAPE:
  96.             DestroyWindow( handle );
  97.             break;
  98.         default:
  99.             break;
  100.         }
  101.         break;
  102.     case WM_DESTROY:
  103.         PostQuitMessage(0);
  104.         break;
  105.     case WM_ENTERMENULOOP:        // メニューが選択されたら動作を停止する
  106.         pause_draw();
  107.         break;
  108.     case WM_COMMAND:            // 選択されたメニューを実行
  109.         switch( window_param ){
  110.  
  111.         case IDM_EXIT:
  112.             DestroyWindow( handle );
  113.             break;
  114.  
  115.         case IDC_CONNECT:
  116.             if( multiplayer ){ 
  117.                     DialogBox( hInst,(LPCTSTR)IDD_ALREADY, handle,(DLGPROC)About );
  118.                     break;
  119.             }
  120.             connect_player( handle );
  121.             break;
  122.         case IDC_DISCONNECT:
  123.             if( multiplayer ){ 
  124.                     disconnect_player( handle );
  125.                     break;
  126.             }
  127.             DialogBox( hInst,(LPCTSTR)IDD_NOCONNECT, handle,(DLGPROC)About );
  128.             break;
  129.  
  130.         case IDM_ABOUT:
  131.             DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, handle, (DLGPROC)About);
  132.             break;
  133.  
  134.         }
  135.         break;
  136.     case WM_EXITMENULOOP:        // メニューの選択が解除されたら動作を再開する
  137.         restart_draw();
  138.         break;
  139.     default:
  140.         return DefWindowProc( handle,msg,window_param,param2 );
  141.     }
  142.     return 0L;
  143. }
  144.  
  145. int APIENTRY WinMain(HINSTANCE hInstance,
  146.                      HINSTANCE hPrevInstance,
  147.                      LPSTR     lpCmdLine,
  148.                      int       nCmdShow )
  149. {
  150. MSG msg;
  151. HACCEL hAccelTable;
  152.  
  153.     // アプリケーションの初期化を行います:
  154.     if( !init_window( hInstance, nCmdShow ) ) {    return false; }
  155.     hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_OHX4);
  156.     if( !init_input() ){ return false; }
  157.     if( !init_D3DX() ){ return false; }
  158.     if( !start_D3DX() ){ return false; }
  159.  
  160.     init_shapes();        //    形状初期化
  161.     init_objects();        //    3Dマップ初期化
  162.     init_directplay();    //    通信機能初期化
  163.     init_player();        //    プレイヤーステータス初期化
  164.  
  165. // メイン メッセージ ループ:
  166.     msg.wParam = 0;
  167.     while( 1 ){
  168.         if (PeekMessage(&msg,0,0,0,PM_REMOVE)) {
  169.             if (msg.message == WM_QUIT)
  170.                 break;
  171.  
  172.             TranslateMessage(&msg);
  173.             DispatchMessage(&msg);
  174.         } else {
  175.             if( !realtime_render() ) PostQuitMessage(0);
  176.             player_drive();
  177.         }
  178.     }
  179.     release_directplay();    //    DirectPlay 終了処理
  180.     release_objects();        //    オブジェクト解放
  181.     release_shapes();        //    3D物体解放
  182.     release_input();        //    DirectInput解放
  183.     release_D3DX();            //    Direct3DXの終了処理
  184.     end_application();        //    アプリケーションの終了処理
  185.     return msg.wParam;
  186. }
  187.  
  188. // バージョン情報ボックス用メッセージ ハンドラ
  189. LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
  190. {
  191.     switch( message )
  192.     {
  193.         case WM_INITDIALOG:
  194.                 return TRUE;
  195.  
  196.         case WM_COMMAND:
  197.             if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) 
  198.             {
  199.                 EndDialog(hDlg, LOWORD(wParam));
  200.                 return TRUE;
  201.             }
  202.             break;
  203.     }
  204.     return FALSE;
  205. }
  206. // バージョン情報ボックス用メッセージ ハンドラ
  207. LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
  208. {
  209.     switch( message )
  210.     {
  211.         case WM_INITDIALOG:
  212.                 return TRUE;
  213.  
  214.         case WM_COMMAND:
  215.             if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) 
  216.             {
  217.                 EndDialog(hDlg, LOWORD(wParam));
  218.                 return TRUE;
  219.             }
  220.             break;
  221.     }
  222.     return FALSE;
  223. }